<?php
/*
  Необходимо для работы с заголовками и выставления правильных заголовков ответа
*/
if(!function_exists('getallheaders')){
  function getallheaders() {
    foreach($_SERVER as $name => $value){
      if(substr($name, 0, 5) == 'HTTP_'){
        $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
      }
    }
    return $headers;
  }
}

if(!function_exists('array_diff_key')){
  function array_diff_key(){
    $arrs = func_get_args();
    $result = array_shift($arrs);
    foreach ($arrs as $array) {
      foreach ($result as $key => $v) {
        if (array_key_exists($key, $array)) {
          unset($result[$key]);
        }
      }
    }
    return $result;
  }
}

if (!function_exists('ftp_chmod')) {
  function ftp_chmod($ftp_stream, $mode, $filename){
    return ftp_site($ftp_stream, sprintf('CHMOD %o %s', $mode, $filename));
  }
}

function toUTF8($str, $inChar = "windows-1251"){
  if(function_exists("mb_convert_encoding")){
    return mb_convert_encoding($str, "UTF-8", $inChar);
  } elseif (function_exists("iconv")){
      return iconv($inChar, "UTF-8", $str);
  } else {
    return "";
  }
}

function fromUTF8($str, $outChar = "windows-1251"){
  if(function_exists("mb_convert_encoding")){
    return mb_convert_encoding($str, $outChar, "UTF-8");
  } elseif (function_exists("iconv")){
      return iconv("UTF-8", $outChar ."//IGNORE", $str);
  } else {
    return "";
  }
}

function getmicrotime(){
  list($usec, $sec) = explode(" ",microtime());
  return ((float)$usec + (float)$sec);
}

function localURLFix($fileName){
  $fileName = realpath($fileName);
  if($fileName === false) return false;
  if(DIRECTORY_SEPARATOR == "\\"){
    $fileName = "file:///". strtr($fileName, DIRECTORY_SEPARATOR, "/");
  }
  return $fileName;
}

function humanDate($tstamp, $withTime = true) {
  $currentTime = time();
  $month = date('n', $tstamp);
  $year = date('Y', $tstamp);

  $ruMonths = array(
    'января',
    'февраля',
    'марта',
    'апреля',
    'мая',
    'июня',
    'июля',
    'августа',
    'сентября',
    'октября',
    'ноября',
    'декабря'
  );

  $result = '';

  if(date('Y-m-d', $currentTime) == date('Y-m-d', $tstamp)){
    $result .= 'сегодня';
  } elseif (date('Y-m-d', strtotime('+1 day', $tstamp)) == date('Y-m-d', time())){
    $result .= 'вчера';
  } else {
    $result .= date('j', $tstamp) . ' ' . $ruMonths[$month - 1];
  }

  if($withTime){
    $result .= ', '. date('H:i', $tstamp);
  }

  return $result;
}

function pager($baseURL, $count, $current = 1, $with = array(), $without = array()){
  $d = $count / 10;
  $left = max($current - 4, 1);
  $right = min($current + 4, ceil($d));
  if ($left == $right) return;
  echo "<div class=\"pager\"><strong>Страницы</strong>: ";
  for($i = $left; $i < $right+1; $i++){
    $params = array_merge($with, array('page' => $i - 1));
    $excl = $i == 1? array_merge($without, array('page' => $i)) : $without;
    $url = queryGenerator($params, $excl);
    if(($url == '' && $_SERVER['QUERY_STRING'] == '') || $url == '?'. $_SERVER['QUERY_STRING']){
      echo "<b>", $i,"</b>";
    } else {
      echo "<a href=\"", $baseURL, $url, "\">", $i, "</a>";
    }
    if($i < $right) echo " . ";
  }
  echo "</div>";

}

function queryGenerator($with = array(), $without = array()){
  $params = array_diff_key(array_merge($_GET, $with), $without);
  $tmp = array();
  foreach($params as $name => $value) {
    $tmp[] = urlencode($name) . '=' . urlencode($value);
  }
  return (count($tmp) > 0)? '?'. join($tmp, '&') : '';
}

?>